# -*- coding:utf-8 -*-
# @FileName : app\api\v1\models\services.py
# @Time     : 2025/11/28
# @Author   : 天空之城
"""模型API模块业务逻辑文件

此模块包含模型调用相关的业务逻辑，处理模型的创建和调用等操作。
"""
from app.services import ModelFactory
from app.config import logger
from typing import List, Dict, Any, Optional


class ModelService:
    """模型服务类
    
    提供模型调用相关的业务逻辑方法，实现模型的创建和调用等功能。
    """
    
    def __init__(self):
        """初始化模型服务类
        
        创建ModelFactory实例用于管理模型。
        """
        self.model_factory = ModelFactory()
    
    def get_supported_models(self) -> dict[str, Any]:
        """获取支持的模型列表
        
        Returns:
            支持的模型类型列表
        """
        return self.model_factory.get_supported_models()
    
    def call_model(
        self,
        model_type: str,
        messages: List[Dict[str, Any]],
        tools: Optional[List[Dict[str, Any]]] = None,
        tool_choice: Optional[str] = "auto",
        temperature: float = 0.1
    ) -> Dict[str, Any]:
        """调用指定类型的模型生成响应
        
        Args:
            model_type: 模型类型，支持'deepseek'、'moda'、'yuanjing'
            messages: 对话消息列表
            tools: 工具列表
            tool_choice: 工具选择策略
            temperature: 生成温度参数
        
        Returns:
            模型生成的响应数据
        
        Raises:
            ValueError: 当模型类型不支持时抛出
            Exception: 当模型调用失败时抛出
        """
        try:
            # 创建模型实例
            model = self.model_factory.create_model(model_type)
            
            # 调用模型生成响应
            response = model.generate_response(
                tools=tools,
                messages=messages,
                tool_choice=tool_choice,
                temperature=temperature
            )
            
            logger.info(f"模型调用成功: {model_type}")
            return response
        except ValueError as e:
            logger.error(f"模型类型错误: {model_type}", exc_info=True)
            raise
        except Exception as e:
            logger.error(f"模型调用失败: {model_type}", exc_info=True)
            raise
